<?php

require_once $SystemConest[0]."/inc/Uifunction.php";
require_once "./api/uc.php";
/*******************************************************************************
 * 通用函数
 ******************************************************************************/
/**
 * 构建一维简单数组（主要用于构造适用于html:radio和html:checkbox标签的数据源）
 * @param $array 源数组
 * @param $keyField 新数组键名字段
 * @param $valField 新数组键值字段
 */
function makearray($array, $keyField, $valField) {
    $ret = array();
    foreach($array as $row)
        if(!empty($row[$keyField]))
            $ret[$row[$keyField]] = $row[$valField];
    return $ret;
}
/**
 * 对象转数组
 * @param String $http 网址
 */
function object2array($object) {
    if(is_object($object)) {
        $object = (array)$object;
    }
    if(is_array($object)) {
        foreach($object as $key=>$value) {
            $object[$key] = object2array($value);
        }
   }
   return $object;
}
/**
 * 三元运算，类似a==param?b:c
 */
function a2bc($a, $param = 1, $b = '', $c = '') {
    $returnString = $a == $param ? $b : $c;
    return $returnString;
}
/**
 * 构建分段URL
 * @param $pre 前缀(一般是系统的参数分割符，如-)
 * @param $array 基础数据
 * @param $index 位置(从1开始)
 * @param $value 值
 */
function makeparam($pre, $array, $index, $value) {

    $count = max(count($array), $index);
    $array[$index-1] = $value;
    
    $ret = '';
    for($i = 0; $i < $count; $i++) {
        $depr = ($i == 0 ? $pre : '_');
        $ret .= empty($array[$i]) ? ($depr . '0') : ($depr . $array[$i]);
    }
    $ret = preg_replace('/(_0)+$/', '', $ret);
    if($ret==($pre.'0')) return '';
    return $ret;
}

/*******************************************************************************
 * 线路相关函数
 ******************************************************************************/
/**
 * 获取特色类别名称
 */
function getTeSeName($teseID, $lng = "") {
    $teseID = intval($teseID);
    $data = M("classsys")->field('classsys0 as id,classsys1 as name_cn,classsys7 as name_en')->where("classsys0=$teseID")->find();
    if($lng == 'en')
        return $data['name_en'];
    else
        return $data['name_cn'];
}

/**
 * 获取关联景点名称
 */
function getJingDianName($jingdianID, $lng = "") {
    $jingdianID = intval($jingdianID);
    $data = M("classsys")->field('classsys0 as id,classsys1 as name_cn,classsys7 as name_en')->where("classsys0=$jingdianID")->find();
    if($lng == 'en')
        return $data['name_en'];
    else
        return $data['name_cn'];
}

/**
 * 获取目的地名称
 */
function getDestName($destID, $lng = "") {
    $destID = intval($destID);
    $data = M("classsys")->field('classsys0 as id,classsys1 as name_cn,classsys7 as name_en')->where("classsys0=$destID")->find();
    if($lng == 'en')
        return $data['name_en'];
    else
        return $data['name_cn'];
}

/**
 * 国内周边游索引：按特色类别和景点分
 * $isPackageTour 是否支持包团游，false不限,true必须支持
 * @return array(
 *      '特色类别ID_'=>array(
 *          '目的地ID',
 *          ...
 *      ),
 *      ...
 *  )
 */
function ZhouBianYouIndex($fromDest, $isPackageTour=false) {
    //★获取出发地下的周边游线路
    $condition['tour10'] = array('like',"%,$fromDest,%");
    //属于国内线路
    $condition['tour4'] = array('eq',544);
    //忽略没有选择特色类别的项目
    $condition['tour50'] = array('neq','');
    //是否同时属于包团游
    if($isPackageTour)
        $condition['tour40'] = array('like',array("%,1273,%","%,1272,%"),'AND');
    else
        $condition['tour40'] = array('like',"%,1273,%");
    $tours = M('tour')->where($condition)->select();
    //★分析本类线路所涉及的特色类别和目的地
    $tese_ALL = array();
    foreach($tours as $tour) {
        $tour_tese = explode(',', trim($tour['tour50'],','));
        foreach($tour_tese as $teseID) {
            //如果总类里还没有该特色类别tour50则加入，为便于去重所以用键名加下划线形式保存
            if(!isset($tese_ALL[$teseID."_"]))
                $tese_ALL[$teseID."_"] = array();
            //加入当前线路的目的地信息到特色类别
            if(!in_array($tour['tour9'], $tese_ALL[$teseID."_"]))
                $tese_ALL[$teseID."_"][] = $tour['tour9'];
        }
    }
    return $tese_ALL;
}
//自助游定义：含国内自助游和出境自助游
function ZiZhuYouIndex($fromDest) {
    return array(
        "GuoNei" => destTreeGen($fromDest, 544, 1271),
        "ChuJing" => destTreeGen($fromDest, 563, 1271)
    );
}
//包团游定义：含国内周边包团游，国内包团游，出境包团游
function BaoTuanYouIndex($fromDest) {
    return array(
        "ZhouBian" => ZhouBianYouIndex($fromDest,true),
        "GuoNei" => destTreeGen($fromDest, 544, 1272),
        "ChuJing" => destTreeGen($fromDest, 563, 1272)
    );
}
//出境游定义：目的地属于国外，含出境自助游，出境包团游，不涉及周边游
function ChuJingYouIndex($fromDest) {
    return destTreeGen($fromDest, 563);
}
//国内游定义：目的地属于国内，含国内周边游，国内自助游，国内包团游
function GuoNeiYouIndex($fromDest) {
    return destTreeGen($fromDest, 544);
}
/**
 * 生成目的地索引
 * @param $menuId 544属于国内游，563属于出境游
 * @param $type 1271自助游，1272包团游，1273周边游
 */
function destTreeGen($fromDest, $menuId=544, $type=0) {
    //★获取出发地下的国内游线路
    $condition['tour10'] = array('like',"%,$fromDest,%");//出发地
    if(!empty($menuId)) {
        $condition['tour4'] = array('eq',$menuId);
    }
    if(!empty($type)) {
        $condition['tour40'] = array('like',"%,$type,%");
    }
    $tours = M('tour')->where($condition)->select();
    //★收集所有涉及到的目的地
    $dests = array();
    foreach($tours as $tour) {
        //解析当前线路的目的地
        $dests[] = $tour['tour9'];
    }
    $dests = array_unique($dests);
    //★顺藤摸瓜式构建目的地索引
    $destIndex = array();
    foreach($dests as $destID)
        $destIndex = destTreeAdd($destIndex,destTreeRootLook($destID));
    return $destIndex;
}

/**
 * 目的地逆向查询，为兼容复杂树结构而采用多级数组
 * @return array(
 *         id_ => array(
 *               根节点各项字段,
 *               child => array(
 *                        id_ => array(
 *                             子节点各项字段,
 *                             child => array(
 *                                      id_ => array(孙节点...)
 *                             )
 *                        )
 *               )
 *          )
 * )
 */
function destTreeRootLook($destID) {
    $destData = M('classsys')
                ->field("classsys0 as id,classsys2 as pid,classsys1 as name_cn,classsys7 as name_en")
                ->where("classsys0=$destID")->find();
    if(!empty($destData["pid"])) {
        $parent = destTreeRootLook($destData["pid"]);
        $parent[$destData["pid"].'_']["child"][$destData['id'].'_'] = $destData;
        return $parent;
    } else {
        return array($destData['id'].'_' => $destData);
    }
}

/**
 * 多级目的地合并
 * @param $array1 基础目的地数组，可能有多项
 * @param $array2 要并入的目的地数组，只能有一项
 */
function destTreeAdd($baseTree, $treeNode) {
    if(empty($treeNode)) return $baseTree;
    foreach($treeNode as $key=>$val) {
        if(empty($baseTree[$key])) {
            $baseTree[$key] = $treeNode[$key];
            return $baseTree;
        } else {
            $baseTree[$key]['child'] = destTreeAdd($baseTree[$key]['child'], $treeNode[$key]['child']);
            return $baseTree;
        }
    }
}

/*******************************************************************************
 * 客栈相关
 ******************************************************************************/
/**
 *找出酒店房型存的时间值中 价格最小的值  格式如下:
 *2012-05-06|市场价|本站价|房差|房间数量
 * @param  $str 
 */
function formathotelminprice($str){
	if($str=="") return "-";
	$arr=explode(",",$str);
	$temp=0;
	foreach ($arr as $k=>$v){
		$thisp=getkuohaostr($v,"/^[\d]{4}\-[\d]{1,2}\-[\d]{1,2}\|[\d\.]+\|([\d\.]+)\|[\d\.]*\|[\d]+$/");
		if($thisp>$temp)$temp=$thisp;
	}
	return $temp;
	
}


/**
 * 格式化客栈的特色字符串，加随机样式
 * @param  $str 源字符串
 */
function formatteshestr($str){
	$colorarr=array("red","q_blue","green","yellow","dark_red","dark_bg","zs");
	$boldarr=array("bold","");
	$fontarr=array("font18","");
	if($str=="") return "";
	$arr=preg_split("/[,，.。]/", $str);
	$temp="";
	foreach ($arr as $v){
		$colors=$colorarr[rand(0, 6)];
		if(strlen($v)>2) $temp.="<i class='".$colors." ".$fontarr[rand(0, 1)]." ".$boldarr[rand(0, 1)]."'>".$v."</i>";
	}
	return $temp;
	
}

/**
 * 格式化评论的最后总百分比,最高分为5,最低分为0
 * @param $str  传入格式:数1,数2,数3.....
 * @return 格式化后的最后总的百分比，比如每项都是5的话，最后返回的是100
 */
function formatpingluntotal($str){
	preg_match_all("/[0-9]/",$str,$tem);
	$num=count($tem[0]);
	$t=0;
	foreach($tem[0] as $v){
		$t=$t+$v;
	}
	$t=number_format($t*20/$num,2);
	
	return (getsubstr($t,"/^0/")=="0")?100:$t;
}

/**
 * 根据评论的总分数和总统计条数，计算出总的评分
 * @param $totalnum  所有分数加起来之和
 * @param $num  有多少条
 */
function formatpingluntwov($totalnum,$num){
	$t= ($totalnum*20)/($num*6);
	$t= number_format($t,2);
	
	return (getsubstr($t,"/^0/")=="0")?100:$t;
}

/**
 * 返回格式化后显示进度条的数字，作用是去掉小数，当是0时返回100
 * @param $str 原数字
 * @param $isfloat 是否返回float形式
 */
function formatonevale($str,$isfloat="f"){
	$temp=100;
	if(getsubstr($str,"/^0/")!="0"){
		if($isfloat=="f"){
			$temp=preg_replace("/\.[\d]$/","",$str);
		}else{
			$temp=$str;
		}
	}
	return $temp;
}

/*******************************************************************************
 * 其他
 ******************************************************************************/
 /**
 *  获取产品索引
    最终形成的数据结构如下：
    $ProductIndex = array(
        "_线路类别ID" => array(
            "_特色类别ID" => array("特色景点ID","特色景点ID", ...),
            "_特色类别ID" => array("特色景点ID","特色景点ID", ...)
        ),
        "_线路类别ID" => array(
            "_特色类别ID" => array("特色景点ID","特色景点ID", ...),
            "_特色类别ID" => array("特色景点ID","特色景点ID", ...)
        )
    );
 */

    /*
    $m = M('classsys');
    //获取线路类别
    $tourClass = $m->field('classsys0 as id,classsys1 as name_cn,classsys7 as name_en')->where('classsys3=569')->order('classsys4 desc')->select();
    $tourClassCount = count($tourClass);
    $ProductIndex = array();
    for($i = 0; $i < $tourClassCount; $i++) {
        //★获取该类别下全部国内线路，出境线路后面再单列[tour4=544国内][tour4=563出境]
        //TODO 先不管线路是否有效
        $tourClassId = $tourClass[$i]['id'];
        $condition['tour40'] => array('like',"%{$tourClassId}%");//属于当前循环的类别
        $condition['tour4'] => array('in',array("544","563"));//囊括国内游，出境游
        $tours = M('tour')->where($condition)->select();
        //★分析本类线路所涉及的特色类别和关联景点
        //tour50特色类别            tour49关联景点
        $tese_ALL = array();
        foreach($tours as $tour) {
            //解析当前线路的特色类别，为便于去重所以用键名形式保存
            $tour_tese_tmp = explode(',', $tour['tour50']);
            foreach($tour_tese_tmp as $v)
                $tour_tese_mrg["_$v"] = array();//准备保存关联景点
            //将当前线路的特色类别并入总类
            if(!empty($tour_tese_mrg))
                $tese_ALL = array_merge($tese_ALL, $tour_tese_mrg);
            //解析当前线路的关联景点
            $tour_jingdian = explode(',', $tour['tour49']);
            //将当前线路的关联景点并入所属类别
            foreach($tour_tese_tmp as $v)
                $tese_ALL["_$v"] = array_unique(array_merge($tese_ALL["_$v"], $tour_jingdian));
        }
        $ProductIndex["_$tourClassId"] = $tese_ALL;
    }

    
    $mr=M("classsys");
    $result=array();
    
    //查找线路特色类别
    $rs=$mr->where("classsys3=565 order by classsys4 desc")->select();
    $i=0;
    foreach($rs as $k=>$v)
    {
        $result[$i]=$v;
        //TODO 查询这个特色类别下的关联景点，并确保已经录入了线路
        //tour49关联景点
        //tour50特色类别
        $sql="select * from ".DQ."classsys as a
              where classsys3=566 and
              exists (
                select * from ".DQ."tour as b
                where
                    b.tour49 like ''+a.classsys0+''
                    and b.tour50 like '%".$v["classsys0"]."%'
              )
              order by classsys4 desc
              limit 0,6";
        $result[$i]["jingdian"] = $mr->query($sql);
        $i++;
    }

    $this->assign("tese",$result);
    
    //获取国内游类别
    $rsguolei=$mr->where("classsys3=551 and classsys2>0 ")->select();
    $this->assign("rsguolei",$rsguolei);
    
    //获取出境旅游线路类别
    $rsabroad=$mr->where("classsys3=562 and classsys2>0 ")->select();
    $this->assign("rsabroad",$rsabroad);
    
    return $this->fetch("classsys:getteshe");
    */


?>